package thimeeeee.Model;

//import thimeeeee.Skeleton;

/*
 * A játékost megvalósító osztály
 */
public class Player extends MovingElement {
	Level level;
	Game game;

    private boolean alive = true;
    	
    public Player(Game g)
    {
        super();
//        Skeleton.Create("Player");
//        Skeleton.StartFunc("Player()");
        game = g;
//        Skeleton.EndFunc("Player()","void");
    }

    public boolean IsAlive(){
        return alive;
    }

    // a játékos egy bombát helyez el a mezőn, amin éppen áll
	public void PlaceBomb()
    {
//		Skeleton.StartFunc("Player.PlaceBomb()");

        if(level.GetBomb())
        {
            MyField.AddElement(new Bomb());
        }

//        Skeleton.EndFunc("Player.PlaceBomb()", "void");
	}

    // ha rázuhan egy kő, vagy gyémánt, akkor a jétákos meghal
    @Override
    public boolean MeetFallingElement(FallingElement fe)
    {
//        Skeleton.StartFunc("Player.MeetFallingElement()");

        //ha esik, akkor elemek megsemmisítése
        if (fe._isFalling)
        {
            //a zuhanó elem is megsemmisül
            fe.Kill();
            this.Kill();
        }
        //egyébként csak nem tud rálépni
//        Skeleton.EndFunc("Player.MeetFallingElement()", "null");
        return false;
    }

    // a játékos az Idle() hívásra lép, ha be van állítva egy irány
    
    @Override
    public void Idle(double aTimeStamp)
    {
        boolean canIGo=true;
        boolean putBomb = false;

//        Skeleton.StartFunc("Player.Idle()");

        //SKELETON
//        String s = Skeleton.Ask("Akarsz Bombát lerakni? ((I/N))", new String[]{"I", "N"});
//        if(s.compareToIgnoreCase("I") == 0) putBomb = true;
//        else if(s.compareToIgnoreCase("N") == 0) putBomb = false;
//
        if(putBomb)
        {
            Bomb bomb = new Bomb();
            MyField.AddElement(bomb);
        }

        if(gotodirection != Direction.none)
        {
            Field neighborField = MyField.GetNeighbor(gotodirection);
            ElementBase[] neighborElements = neighborField.GetElements();
            if(!neighborField.IsEmpty())
            {
                for(int i = 0; i < neighborElements.length; i++)
                {
                    //Meghatározzuk, hogy tudunk e odalépni
                    if (neighborElements[i] != null){
                        canIGo = (canIGo && (neighborElements[i].MeetPlayer(this)));
                    }
                }
            }
            //Ha oda tudunk lépni
            if(canIGo)
            {
                //szagnyom hátrahagyása

                MoveTo(neighborField);
            }
        }
        MyField.SetTrace();
        this.gotodirection = Direction.none;
//        Skeleton.EndFunc("Player.Idle()","void");
    }

    public int GetCountBomb()
    {
        return level.GetBombCount();
    }
    
    public void SetCountBomb(int i)
    {
        level.SetBombCount(i);
    }

    @Override
    public boolean MeetBeast(){
//        Skeleton.StartFunc("Player.MeetBeast()");
        this.Kill();
//        Skeleton.EndFunc("Player.MeetBeast()", "true");
        return true;
    }

    @Override
    public void Kill(){
//        Skeleton.StartFunc("Player.Kill()");
        this.MyField.RemoveElement(this);
        alive = false;
        game.KillPlayer();
//        Skeleton.EndFunc("Player.Kill()", "void");
    }
}